﻿using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using QRCoder;
using System.Drawing.Drawing2D;
using System.Drawing;

namespace RBAC.api.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class PRCodeController1 : ControllerBase
    {

        private readonly IWebHostEnvironment host;

        public PRCodeController1(IWebHostEnvironment host)
        {
            this.host = host;
        }

        [HttpGet]
        //public async Task<string> Qrcode()
        //    {


        //    //创建一个新的QRCodeGenerator实例
        //    QRCodeGenerator qrGenerator = new QRCodeGenerator();
        //    //创建一个二维码 “123123”为显示内容
        //    QRCodeData qrCodeData = qrGenerator.CreateQrCode("123123", QRCodeGenerator.ECCLevel.M, true);
        //    //放入生成的二维码
        //    QRCode qrCode = new QRCode(qrCodeData);
        //    //获取到二维码图形
        //    Bitmap qrCodeImage = qrCode.GetGraphic(15, Color.Black, Color.White, false);

        //    /* GetGraphic方法参数说明
        //     * public Bitmap GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, Bitmap icon = null, int iconSizePercent = 15, int iconBorderWidth = 6, bool drawQuietZones = true)
        //     * int pixelsPerModule:生成二维码图片的像素大小 ，我这里设置的是5 
        //     * Color darkColor：暗色   一般设置为Color.Black 黑色
        //     * Color lightColor:亮色   一般设置为Color.White  白色
        //     * Bitmap icon :二维码 水印图标 例如：Bitmap icon = new Bitmap(路径); 默认为NULL ，加上这个二维码中间会显示一个图标
        //     * int iconSizePercent： 水印图标的大小比例 ，可根据自己的喜好设置 
        //     * int iconBorderWidth： 水印图标的边框
        //     * bool drawQuietZones:静止区，位于二维码某一边的空白边界,用来阻止读者获取与正在浏览的二维码无关的信息 即是否绘画二维码的空白边框区域 默认为true
        //    */

        //    //新图形(给出自定义大小,可以解决二维码生成时因为内容而影响图片大小的问题)
        //    /*
        //     * 550为宽高 
        //     * +60为上下左右各留出30的空白区域
        //     * 35*2为我要给图片底下添加字体 最多两行 35是行高 提前调试得知
        //     */
        //    Bitmap newBM = new Bitmap(550 + 60, 550 + (35 * 2) + 60);
        //    //新画布
        //    Graphics newGP = Graphics.FromImage(newBM);
        //    //清除所有背景色并指定背景颜色
        //    newGP.Clear(Color.White);
        //    // 插值算法的质量
        //    newGP.InterpolationMode = InterpolationMode.HighQualityBicubic;
        //    //将旧图画入新图中
        //    /*
        //     * qrCodeImage:旧图
        //     * new Rectangle(30, 30, 550, 550):在画布上操作的定位及宽高(前两个参数为距左边,距顶部,后边为宽高)  此处宽高为自定义
        //     * new Rectangle(0, 0, qrCodeImage.Width, qrCodeImage.Height):要操作图片的定位及宽高
        //     * GraphicsUnit.Pixel:使用像素为单位
        //     */
        //    newGP.DrawImage(qrCodeImage, new Rectangle(30, 30, 550, 550), new Rectangle(0, 0, qrCodeImage.Width, qrCodeImage.Height), GraphicsUnit.Pixel);
        //    //设置字体
        //    Font font = new Font("楷体", 30f, FontStyle.Bold, GraphicsUnit.Pixel);
        //    //文字居中(不会换行)
        //    //文字长度
        //    //int strWidth = (int)g2.MeasureString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font1).Width;
        //    //总长度减去文字长度的一半  （居中显示）
        //    //int wordStartX = (qrCodeImage.Width - strWidth) / 2;
        //    //int wordStartY = qrCodeImage.Height - 30;
        //    //g2.DrawString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font1, Brushes.Black, wordStartX, wordStartY);

        //    //以下为文字居中处理(可以换行)
        //    RectangleF rec = new RectangleF((float)(newBM.Width * 0.10), newBM.Height - ((35 * 2) + 15), (float)(newBM.Width * 0.80), font.Height * 2);
        //    Brush fontBrush = SystemBrushes.ControlText;
        //    //此处为设置居中方式可以让换行后的文字也居中
        //    StringFormat sformat = new StringFormat();
        //    sformat.Alignment = StringAlignment.Center;
        //    sformat.LineAlignment = StringAlignment.Center;
        //    newGP.DrawString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font, fontBrush, rec, sformat);
        //    //资源释放
        //    newGP.Dispose();



        //    var dirpath = $@"Router\{DateTime.Now.ToString("yyyy")}\{DateTime.Now.ToString("hhss")}";

        //    var fundirapth = Path.Combine(host.WebRootPath, dirpath);

        //    if(!Directory.Exists(fundirapth))
        //    {
        //        Directory.CreateDirectory(fundirapth);
        //    }

        //    var filename = $"{DateTime.Now.ToString("yyyyMMddsshhss")}.jpg";
           
        //    var path=Path.Combine(fundirapth, filename);
        //    newBM.Save(path);



         



        //    return $"{dirpath}/{filename}";
        //    }

        public async Task<string>GETThey()
        {
            //创建一个新的QRCodeGenerator实例
            QRCodeGenerator qrGenerator = new QRCodeGenerator();
            //创建一个二维码 “123123”为显示内容
            QRCodeData qrCodeData = qrGenerator.CreateQrCode("123123", QRCodeGenerator.ECCLevel.M, true);
            //放入生成的二维码
            QRCode qrCode = new QRCode(qrCodeData);
            //获取到二维码图形
            Bitmap qrCodeImage = qrCode.GetGraphic(15, Color.Black, Color.White, false);

            /* GetGraphic方法参数说明
             * public Bitmap GetGraphic(int pixelsPerModule, Color darkColor, Color lightColor, Bitmap icon = null, int iconSizePercent = 15, int iconBorderWidth = 6, bool drawQuietZones = true)
             * int pixelsPerModule:生成二维码图片的像素大小 ，我这里设置的是5 
             * Color darkColor：暗色   一般设置为Color.Black 黑色
             * Color lightColor:亮色   一般设置为Color.White  白色
             * Bitmap icon :二维码 水印图标 例如：Bitmap icon = new Bitmap(路径); 默认为NULL ，加上这个二维码中间会显示一个图标
             * int iconSizePercent： 水印图标的大小比例 ，可根据自己的喜好设置 
             * int iconBorderWidth： 水印图标的边框
             * bool drawQuietZones:静止区，位于二维码某一边的空白边界,用来阻止读者获取与正在浏览的二维码无关的信息 即是否绘画二维码的空白边框区域 默认为true
            */

            //新图形(给出自定义大小,可以解决二维码生成时因为内容而影响图片大小的问题)
            /*
             * 550为宽高 
             * +60为上下左右各留出30的空白区域
             * 35*2为我要给图片底下添加字体 最多两行 35是行高 提前调试得知
             */
            Bitmap newBM = new Bitmap(550 + 60, 550 + (35 * 2) + 60);
            //新画布
            Graphics newGP = Graphics.FromImage(newBM);
            //清除所有背景色并指定背景颜色
            newGP.Clear(Color.White);
            // 插值算法的质量
            newGP.InterpolationMode = InterpolationMode.HighQualityBicubic;
            //将旧图画入新图中
            /*
             * qrCodeImage:旧图
             * new Rectangle(30, 30, 550, 550):在画布上操作的定位及宽高(前两个参数为距左边,距顶部,后边为宽高)  此处宽高为自定义
             * new Rectangle(0, 0, qrCodeImage.Width, qrCodeImage.Height):要操作图片的定位及宽高
             * GraphicsUnit.Pixel:使用像素为单位
             */
            newGP.DrawImage(qrCodeImage, new Rectangle(30, 30, 550, 550), new Rectangle(0, 0, qrCodeImage.Width, qrCodeImage.Height), GraphicsUnit.Pixel);
            //设置字体
            Font font = new Font("楷体", 30f, FontStyle.Bold, GraphicsUnit.Pixel);
            //文字居中(不会换行)
            //文字长度
            //int strWidth = (int)g2.MeasureString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font1).Width;
            //总长度减去文字长度的一半  （居中显示）
            //int wordStartX = (qrCodeImage.Width - strWidth) / 2;
            //int wordStartY = qrCodeImage.Height - 30;
            //g2.DrawString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font1, Brushes.Black, wordStartX, wordStartY);

            //以下为文字居中处理(可以换行)
            RectangleF rec = new RectangleF((float)(newBM.Width * 0.10), newBM.Height - ((35 * 2) + 15), (float)(newBM.Width * 0.80), font.Height * 2);
            Brush fontBrush = SystemBrushes.ControlText;
            //此处为设置居中方式可以让换行后的文字也居中
            StringFormat sformat = new StringFormat();
            sformat.Alignment = StringAlignment.Center;
            sformat.LineAlignment = StringAlignment.Center;
            newGP.DrawString("嗷嗷待食发货时肯定会房间卡是放假卡上的合肥师范", font, fontBrush, rec, sformat);
            //资源释放
            newGP.Dispose();

            //文件wwwroot路径
            var imaegslu = @"Router";
            //host 是个引用需要实例化
            //他是用于写入我们的vs图片路径
            var fulldir = Path.Combine(host.WebRootPath, imaegslu);
            //
            if(!Directory.Exists(fulldir))
            {
                //放入
                Directory.CreateDirectory(fulldir);
            }
            var filename = $"{DateTime.Now.ToString("yyyyMMddhhss")}.jpg";

            //刷入
            var path = Path.Combine(fulldir, filename);


            newBM.Save(path);



            return $"{imaegslu}/{filename}";
        }
    }
}
